package com.iuie.ns.system.mapper.code;

import java.util.List;
import java.util.Set;

import org.apache.ibatis.annotations.Param;

import com.iuie.ns.frame.persistence.annotations.MyBatisRepository;
import com.iuie.ns.system.tags.beans.SysDropCodeTypeVO;
import com.iuie.ns.system.vo.code.SysCodeInfoVO;

@MyBatisRepository
public interface SysCodeInfoMapper {

	/**
	 * 根据code type id 数组来查询出码值
	 * @param typeIds
	 * @return
	 * @date 2017年8月8日 下午8:52:07
	 */
	List<SysDropCodeTypeVO> findCodeInfosByTypeIdArray(@Param("typeIds") Set<String> typeIds);

    /**
     * 根据code type id查询code info list
     * @param codeTypeId
     * @param state 
     * @return
     * @date 2017年8月12日 下午6:09:46
     */
    List<SysCodeInfoVO> findByCodeTypeId(@Param("codeTypeId") String codeTypeId, @Param("state") Integer state);

    /**
     * 批量新增
     * @param newRecords
     * @date 2017年8月20日 下午1:16:03
     */
    void batchAdd(@Param("records") List<SysCodeInfoVO> newRecords);

    /**
     * 批量修改
     * @param updateRecords
     * @date 2017年8月20日 下午1:16:09
     */
    void batchUpdate(@Param("records") List<SysCodeInfoVO> updateRecords);

    /**
     * 批量删除
     * @param deleteRecords
     * @date 2017年8月20日 下午1:16:14
     */
    void batchDelete(@Param("records") List<SysCodeInfoVO> deleteRecords);

    /**
     * 根据码值类型和条件查询码值
     * @param codeInfo
     * @param typeId
     * @return
     * @date 2017年8月27日 下午2:23:41
     */
    List<SysCodeInfoVO> findCodeInfoByCodeTypeAndCondition(@Param("codeInfo") SysCodeInfoVO codeInfo, @Param("typeId") String typeId);

    /**
     * 查询某个码值类型下的码值数量
     * @param typeId
     * @return
     * @date 2017年8月27日 下午3:48:57
     */
    Integer getCodeInfoCountByTypeId(@Param("typeId") String typeId);

    /**
     * 根据ID删除码值
     * @param id
     * @date 2017年8月27日 下午9:42:48
     */
	void removeById(@Param("id") String id);

	/**
	 * 根据ID查询code info
	 * @param id
	 * @return
	 * @date 2017年8月29日 下午10:12:59
	 */
	SysCodeInfoVO findCodeInfoById(@Param("id") String id);

	/**
	 * 根据码值类型和码值定位一条码值信息
	 * @param codeInfoValue
	 * @param codeType
	 * @return
	 */
	SysCodeInfoVO findCodeInfoByCodeValueAndCodeType(@Param("codeInfoValue") String codeInfoValue, @Param("codeType") String codeType);
	
	/**
	 * 查询指定类型下最大的序号
	 * @param codeType
	 * @return
	 * @date 2018年3月17日下午3:11:37
	 */
	Integer findMaxOrderNumber(@Param("codeType") String codeType);

}
